//package com.poseidon.platform.utils;
//
//import java.io.ByteArrayOutputStream;
//import java.io.IOException;
//import java.io.UnsupportedEncodingException;
//import java.net.URI;
//import java.util.ArrayList;
//import java.util.List;
//import java.util.Map;
//import java.util.Set;
//import javax.net.ssl.SSLContext;
//import javax.net.ssl.TrustManager;
//import org.apache.http.HttpEntity;
//import org.apache.http.HttpResponse;
//import org.apache.http.HttpStatus;
//import org.apache.http.NameValuePair;
//import org.apache.http.ParseException;
//import org.apache.http.StatusLine;
//import org.apache.http.client.HttpClient;
//import org.apache.http.client.entity.UrlEncodedFormEntity;
//import org.apache.http.client.methods.HttpGet;
//import org.apache.http.client.methods.HttpPost;
//import org.apache.http.conn.scheme.Scheme;
//import org.apache.http.conn.ssl.SSLSocketFactory;
//import org.apache.http.entity.BufferedHttpEntity;
//import org.apache.http.entity.ByteArrayEntity;
//import org.apache.http.entity.StringEntity;
//import org.apache.http.impl.client.DefaultHttpClient;
//import org.apache.http.message.BasicNameValuePair;
//import org.apache.http.util.EntityUtils;
//import org.apache.log4j.Logger;
//
///*****
//* @ClassName: HttpClientUtil 
//* @Title:HTTP请求工具类
//* @Description:使用httpclient.jar和httpcore.jar
//* @Company:北京朗泰恒盛信息技术有限公司
//* @author yubd
//* @Email:yubd@liveneo.com.cn 
//* @date 2016年9月23日 下午4:56:24 
//* @version V1.0
// */
//public class HttpClientUtil {
//	
//	final private static Logger logger=Logger.getLogger(HttpClientUtil.class);
//	
//	public static class HttpRequestType {
//		final public static  String POST = "post";
//		final public static  String GET = "get";
//	}
//	/***
//	 * 采用base64编码  并返回解码过后的数据
//	 * @param httpURL 访问地址
//	 * @param requestType 请求类型  POST或GET
//	 * @param paramKey	请求参数 e.g:param={..}
//	 * @param params 参数值
//	 * @param encoding 编码方式
//	 * @return
//	 * @throws Exception
//	 */
//	public static String httpBase64Request(String httpURL,String requestType,String paramKey,Object params,String encoding) throws Exception{
//		String parm=Base64Util.base64Encrypt(params.toString(),encoding);
//		String response=httpRequest(httpURL, requestType, paramKey,parm, encoding);
//		String baseResponse=Base64Util.base64Decrypt(response,encoding);
//		return baseResponse;
//	}
//	
//	/**
//	 * 直接返回数据
//	 * @param httpURL 访问地址
//	 * @param requestType 请求类型  POST或GET
//	 * @param paramKey	请求参数 e.g:param={..}
//	 * @param params 参数值
//	 * @param encoding 编码方式
//	 * @return
//	 * @throws Exception
//	 */
//	public static String httpRequest(String httpURL, String requestType,String paramKey,Object params,String encoding) throws Exception{
//		String respString = "";
//		if(httpURL != null && httpURL.length() > 8){
//			if(httpURL.substring(0, 8).toUpperCase().equals("HTTPS://")) {
//				respString = https(httpURL, requestType,paramKey,params,encoding);
//			}else if(httpURL.substring(0, 7).toUpperCase().equals("HTTP://")) {
//				respString = http(httpURL,requestType,paramKey,params,encoding);
//			}else {
//				throw new Exception("请求异常，没有传入正确的URL信息");
//			}
//		}else {
//			throw new Exception("请求异常，没有传入正确的URL信息");
//		}
//		return respString;
//	}
//	/**
//	 * 
//	 * http请求 json
//	 * @param httpURL
//	 * @return
//	 * @throws SystemException
//	 */
//	@SuppressWarnings({ "resource", "deprecation" })
//	private static String http(String httpURL,String requestType,String paramKey,Object params,String encoding) throws Exception {
//	   HttpClient httpclient = new DefaultHttpClient();
//	   String respString = "";
//       try {
//    	  HttpPost httppost = null;
//    	  HttpGet httpget = null;
//          HttpResponse response = null;
//          StatusLine statusLine = null;
//          try {
//        	  logger.info("后台HTTP请求地址：" + httpURL);
//        	  if(requestType.equalsIgnoreCase(HttpRequestType.POST)) {
//	        	  httppost = new HttpPost(httpURL);
//	        	  //设置请求参数
//	        	  if (params != null) {
//	        		  setParamForHttpPost(httppost, params, encoding);
//		  		  }
//	        	  response = httpclient.execute(httppost);
//        	  	}else {
//        	  		httpget = new HttpGet(httpURL);
//        	  		String str =null;
//        	  		if (params != null) {
//        	  			str=setParamForHttpGet(params, encoding);
//        			}
//        	  		httpget.setURI(new URI(httpget.getURI().toString()+"?"+str));
//        	  		response = httpclient.execute(httpget);
//        	  	}
//          	}catch(Exception e){
//            	e.printStackTrace();
//            	throw new Exception("HTTP请求异常，无法请求到地址：" + httppost.getURI());
//            }
//            statusLine = response.getStatusLine();
//            logger.info("http进行POST请求,请求返回code："+statusLine);
//            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
//                HttpEntity entity = response.getEntity();
//                if (entity != null) {
//                    try {
//                    	respString=new String(getHttpResponseData(entity),encoding);
//					} catch (Exception e) {
//						e.printStackTrace();
//						throw new Exception("HTTP请求异常，无法正常解析请求结果");
//					}
//                }else {
//                	respString = "";
//                }
//              if(requestType.equalsIgnoreCase(HttpRequestType.POST)) {
//            	  httppost.abort();
//              }else {
//            	  httpget.abort();
//              }
//              logger.info("后台HTTP请求结果：" + respString);
//              return respString;
//            }else{
//            	logger.error("请求到地址：" + httpURL + "错误，HTTP错误代码：" + statusLine.getStatusCode());
//            	throw new Exception("请求到地址：" + httpURL + "错误，HTTP错误代码：" + statusLine.getStatusCode());
//            }
//        }finally {
//            httpclient.getConnectionManager().shutdown();
//        }
//	}
//	/**
//	 * 
//	 * https请求
//	 * @param httpURL
//	 * @return
//	 * @throws SystemException
//	 */
//	@SuppressWarnings({ "resource", "deprecation" })
//	private static String https(String httpURL,String requestType,String paramKey,Object params,String encoding)  throws Exception{
//		DefaultHttpClient httpclient = new DefaultHttpClient();
//        String respString = "";
//        try {
//            SSLContext sslctx = null;
//            SSLSocketFactory socketFactory = null;
//            Scheme sch = null;
//            HttpPost httppost = null;
//            HttpGet httpget = null;
//            HttpResponse response = null;
//            StatusLine statusLine = null;
//            try {
//            	sslctx = SSLContext.getInstance("TLS");
//            	sslctx.init(null, new TrustManager[]{new TrustAnyTrustManager()}, null);
//            	socketFactory = new SSLSocketFactory(sslctx);
//            	sch = new Scheme("https", 443, socketFactory);
//            	httpclient.getConnectionManager().getSchemeRegistry().register(sch);
//            }catch(Exception e){
//            	e.printStackTrace();
//            	throw new Exception("HTTPS请求异常，初始化或获取HTTPS证书失败");
//            }
//            try {
//          	  	logger.info("后台HTTP请求地址：" + httpURL);
//          	  	if(requestType.equalsIgnoreCase(HttpRequestType.POST)) {
//	            	httppost = new HttpPost(httpURL);
//	            	//设置请求参数
//	            	if(params != null) {
//	            		setParamForHttpPost(httppost, params, encoding);
//	            	}
//	            	response = httpclient.execute(httppost);
//          	  	}else {
//          	  		httpget = new HttpGet(httpURL);
//          	  		String str=null;
//        	  		if(params != null) {
//	        	  		setParamForHttpGet(params, encoding);
//        	  		}
//        	  		httpget.setURI(new URI(httpget.getURI().toString()+"?"+str));
//        	  		response = httpclient.execute(httpget);
//          	  	}
//            }catch(Exception e){
//            	e.printStackTrace();
//            	logger.error("HTTPS请求异常，无法请求到地址：" + httppost.getURI(),e);
//            	throw new Exception("HTTPS请求异常，无法请求到地址：" + httppost.getURI());
//            }
//            statusLine = response.getStatusLine();
//            logger.info("HTTPS进行POST请求,请求返回code："+statusLine);
//            if(statusLine.getStatusCode() == HttpStatus.SC_OK){
//                HttpEntity entity = response.getEntity();
//                if (entity != null) {
//                    try {
//                    	respString = EntityUtils.toString(entity);
//					} catch (Exception e) {
//						e.printStackTrace();
//						throw new Exception("HTTPS请求异常，无法正常解析请求结果");
//					}
//                }else {
//                	respString = "";
//                }
//              if(requestType.equalsIgnoreCase(HttpRequestType.POST)) {
//            	  httppost.abort();
//              }else {
//            	  httpget.abort();
//              }
//              logger.info("后台HTTP请求结果：" + respString);
//              return respString;
//            }else{
//            	throw new Exception("请求到地址：" + httpURL + "错误，HTTPS错误代码：" + statusLine.getStatusCode());
//            }
//        }finally {
//            httpclient.getConnectionManager().shutdown();
//        }
//	}
//	/*****
//	 * 设置 GET请求参数
//	 * @param params
//	 * @param encoding
//	 * @return
//	 * @throws ParseException
//	 * @throws IOException
//	 */
//	@SuppressWarnings("unchecked")
//	private static String setParamForHttpGet(Object params,String encoding) throws ParseException, IOException{
//		String str=null;
//		if (params instanceof Map) {
//			StringEntity entity = new UrlEncodedFormEntity(dealPostParamsObject((Map<String, Object>) params, encoding),encoding);
//			str=EntityUtils.toString(entity);
//		}else if (params instanceof String) {
//			StringEntity entity = new StringEntity((String) params, encoding);
//			str=EntityUtils.toString(entity);
//		}else if (params instanceof List) {
//			StringEntity entity = new UrlEncodedFormEntity((List<? extends NameValuePair>) params,encoding);
//			str=EntityUtils.toString(entity);
//		}else if (params instanceof byte[]) {
//			byte[] bytes=(byte[]) params;
//			ByteArrayEntity entity=new ByteArrayEntity(bytes);
//			str=EntityUtils.toString(entity);
//		}
//		return str;
//	}
//	/******
//	 * 设置 POST请求参数
//	 * @param httppost
//	 * @param params
//	 * @param encoding
//	 * @throws UnsupportedEncodingException
//	 */
//	@SuppressWarnings("unchecked")
//	private static void setParamForHttpPost(HttpPost httppost,Object params,String encoding) throws UnsupportedEncodingException{
//		if (params instanceof Map) {
//			  StringEntity entity = new UrlEncodedFormEntity(dealPostParamsObject((Map<String, Object>) params, encoding),encoding);
//    		  httppost.setEntity(entity);
//    	  }else if (params instanceof String) {
//    		  StringEntity entity = new StringEntity((String) params,encoding);
//    		  httppost.setEntity(entity);
//    	  }else if (params instanceof List) {
//    		  StringEntity entity = new UrlEncodedFormEntity((List<? extends NameValuePair>) params,encoding);
//    		  httppost.setEntity(entity);
//    	  }else if (params instanceof byte[]) {
//    		  byte[] bytes=(byte[]) params;
//    		  httppost.setEntity(new ByteArrayEntity(bytes));
//    	  }
//	}
//	/**
//     * 处理POST请求URL
//     * @param params
//     * @param enc
//     * @return
//     */
//    private static List<BasicNameValuePair> dealPostParamsObject(Map<String, Object> params, String enc) {
//    	List<BasicNameValuePair> nameValuePairs = new ArrayList<BasicNameValuePair>(params.size());
//    	if (params != null && params.size() > 0) {
//			Set<String> keys = params.keySet();
//			for (Object o : keys) {
//				String key = (String) o;
//				nameValuePairs.add(new BasicNameValuePair(key, String.valueOf(params.get(key))));
//			}
//    	}
//    	return nameValuePairs;
//    }
//    /**
//     * 获取Entity中数据
//     * @param httpEntity
//     * @return
//     * @throws Exception
//     */
//    private static byte[] getHttpResponseData(HttpEntity httpEntity) throws Exception{
//        BufferedHttpEntity bufferedHttpEntity = new BufferedHttpEntity(httpEntity);
//        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
//        bufferedHttpEntity.writeTo(byteArrayOutputStream);
//        byte[] responseBytes = byteArrayOutputStream.toByteArray();
//        return responseBytes;
//    }
//}
